/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package zerocopy_server;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.nio.ByteBuffer;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;

/**
 *
 * @author Teva
 */
public class ZeroCopy_Server 
{
 
    ServerSocketChannel listener = null;
    String toclient;
    ServerSocket ss;
    
    /**
     * @param args the command line arguments
     */
    
  protected void mySetup()
  {
    InetSocketAddress listenAddr =  new InetSocketAddress(5000);

    try 
    {
      listener = ServerSocketChannel.open();
      ss = listener.socket();
      ss.setReuseAddress(true);
      ss.bind(listenAddr);
      System.out.println("Listening on port : "+ listenAddr.toString());
    } 
    catch (IOException e) 
    {
      System.out.println("Failed to bind, is port : "+ listenAddr.toString()+ " already in use ? Error Msg : "+e.getMessage());
    }

  }
     
  private void readData()  
  {
   ByteBuffer dst = ByteBuffer.allocate(4096);
	  try 
          {
		  
           while(true) 
             {
                  SocketChannel conn = listener.accept();                                            
                  System.out.println("Accepted : "+conn);
                  conn.configureBlocking(true);
                  int nread = 0;
                
              while (nread != -1)  
                   {                              
		      try 
                         {
                           	  nread = conn.read(dst);
                                  dst.flip();                         
                         } 
                        
                      catch (IOException e) 
                        {
			  nread = -1;
			}
                                  
		 dst.rewind();                              
		  }
                  
              System.out.println("File transfer is completed");
	  }
           
       } 
          catch (IOException e) 
          {
	  }
          
  }
  
  public static void main(String[] args) 
  {
    ZeroCopy_Server dns = new ZeroCopy_Server();
    dns.mySetup();
    dns.readData();
    }
}
